package com.yazi.mxz.common.db.dao;

import com.yazi.mxz.common.entity.beans.StoreGoods;
import com.myframework.smhj.hibernate.Searching;
import com.myframework.smhj.hibernate.Page;
import com.myframework.smhj.hibernate.dao.Dao;

public interface StoreGoodsDao extends Dao<StoreGoods>{

	/**
	 * 获取同订单的店铺的其它商品<br>
	 * 获取的是在售店铺商品
	 * @param storeGoodsId 订单包含的商品(ID)
	 * @param si 分页信息
	 * @return
	 */
	Page<StoreGoods> listFromSameOrder(Long storeGoodsId, Searching si);
	
	/**
	 * 结束已经到结束时间的打折促销(线上)
	 */
	void false4AtDiscount();
	
	/**
	 * 开始已经到开始时间的打折促销(线上)
	 */
	void true4AtDiscount();
	
	/**
	 * 结束已经到结束时间的打折促销(线下)
	 */
	void false4AtDiscountLocal();
	
	/**
	 * 开始已经到开始时间的打折促销(线下)
	 */
	void true4AtDiscountLocal();
	
	/**
	 * 结束已经到结束时间的赠送促销(线上)
	 */
	void false4AtGift();
	
	/**
	 * 开始已经到促销时间的赠送促销(线上)
	 */
	void true4AtGift();
	
	/**
	 * 结束已经到结束时间的赠送促销(线下)
	 */
	void false4AtGiftLocal();
	
	/**
	 * 开始已经到促销时间的赠送促销(线下)
	 */
	void true4AtGiftLocal();
	
	/**
	 * 	对月销量进行统计和更新
	 * @param lastMonth 上月的这个时刻
	 * @param nowTime 当前时刻
	 * */
	void updateMonthDealByTime(Long lastMonth,Long nowTime);
	
	/**
	 * 	对周销量进行统计和更新
	 * @param lastWeek 上周的这个时刻
	 * @param nowTime 当前时刻
	 * */
	void updateWeekDealByTime(Long lastWeek,Long nowTime);
	
	/**
	 * 	对总销量进行统计和更新
	 * */
	void updateAllDealByTime();
	
	/**
	 * 查询库存大于0的店铺商品
	 * @param sg
	 * @param search
	 * @return
	 */
	Page<StoreGoods> listByStockGtZero(StoreGoods sg, Searching search);
	
	/**
	 * 按编码查询店铺商品
	 * @param sg
	 * @param search
	 * @return
	 */
	Page<StoreGoods> listByBarCodeLike(StoreGoods sg, Searching search);
	
	/**
	 * 将fromClassifyId企业商品类目(包括其子类)中的商品移动到toClassifyId企业商品类目
	 * @param fromClassifyId
	 * @param toClassifyId
	 */
	void move(long fromClassifyId, long toClassifyId);
	
	/**
	 * 查询店铺商品<br>
	 * 查询大于sg.updateTime,其它sg属性按等值(eq)查询
	 * @param sg 等值查询条件(除updateTime外)
	 * @param si 分页信息
	 * @return
	 */
	Page<StoreGoods> listByGtUpdateTime(StoreGoods sg, Searching si);
	
	/**
	 * 将fromCatId商品系统类目(包括其子类)中的商品移动到toCatId商品系统类目
	 * @param fromCatId
	 * @param toCatId
	 */
	void moveByCatId(long fromCatId, long toCatId);
}
